package com.liqi.frame.comm.service;


import com.liqi.frame.comm.po.Role;

import java.util.List;
import java.util.Set;

/**
 * 角色服务接口
 * @author liqi on 2017/8/2.
 */
public interface RoleService {
    /**
     * 取得指定用户的角色
     * @param userId 用户id
     * @return 角色集合
     */
    Set<String> findRoleByUserId(String userId);

    /**
     * 取得指定角色关键字的角色（与当前用户所在的组织有关，模糊查询）
     * @param roleKey 角色关键字
     * @return 角色列表
     */
    List<Role> selectList(String roleKey);

    /**
     * 取得指定id的角色
     * @param id 角色id
     * @return 角色
     */
    Role getRoleById(String id);

    /**
     * 取得指定角色关键字的角色（与当前用户所在的组织无关，精确查询）
     * @param roleKey 角色关键字
     * @return 角色
     */
    List<Role> getRoleListByKey(String roleKey);

    /**
     * 取得指定组织下的指定角色名称的角色（角色名称模糊查询）
     * @param roleName 角色名称
     * @param groupIds 组织id数组
     * @return 角色列表
     */
    List<Role> getRoleListWithName(String roleName, String[] groupIds);

    /**
     * 取得指定组织下指定用户的指定角色名称的角色（角色名称模糊查询）
     * @param roleName 角色名称
     * @param groupIds 组织id数组
     * @param userId 用户id
     * @return 角色列表
     */
    List<Role> getRoleListWithNameByUserId(String roleName, String[] groupIds, String userId);

    /**
     * 插入角色信息
     * @param id 角色id
     * @param roleKey 角色关键字
     * @param name 角色名称
     * @param comment 说明
     * @param orderId 序号
     * @param groupId 组织id
     * @param groupName 组织名称
     * @return 1：成功
     */
    int insertRole(String id,
                   String roleKey,
                   String name,
                   String comment,
                   Float orderId,
                   String groupId,
                   String groupName);

    /**
     * 修改指定id的角色信息
     * @param id 角色id
     * @param roleKey 角色关键字
     * @param roleName 角色名称
     * @param comment 说明
     * @param orderId 序号
     * @param groupId 组织id
     * @param groupName 组织名称
     * @return 结果
     */
    int updateRole(String id,
                   String roleKey,
                   String roleName,
                   String comment,
                   Float orderId,
                   String groupId,
                   String groupName);

    /**
     * 修改指定角色的序号
     * @param id 角色id
     * @param orderId 序号
     * @return 结果
     */
    int updateOrderId(String id,
                      Float orderId);

    /**
     * 删除指定角色
     * @param id 角色id
     * @return 结果
     */
    int deleteRoleById(String id);

    /**
     * 取得指定用户名称的角色列表（精确查询）
     * @param username 用户名称
     * @return 角色列表
     */
    List<Role> getRoleListByUsername(String username);

    /**
     * 取得指定用户名称的角色列表（精确查询）
     * @param userId 用户id
     * @return 角色列表
     */
    List<Role> getRoleListByUserId(String userId);

    /**
     * 添加或修改角色对应的菜单
     * @param roleId 角色id
     * @param menuIds 菜单id数组
     * @return 结果
     */
    int saveRoleAndMenus(String roleId, String[] menuIds);

    /**
     * 添加或修改角色对应的操作
     * @param roleId 角色id
     * @param OperationIds 操作id数组
     * @return 结果
     */
    int saveRoleAndOperations(String roleId, String[] OperationIds);

    /**
     * 取得指定组织的角色列表
     * @param groupId 组织id
     * @return 角色列表
     */
    List<Role> getRoleListByGroupId(String groupId);
}
